package com.ada.spark.rddoperator

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 作用：缩减分区数，用于大数据集过滤后，提高小数据集的执行效率。
  */
object Spark11_coalesce {

    def main(args: Array[String]): Unit = {
        //创建SparkConf
        val conf = new SparkConf().setAppName("Spark11_coalesce").setMaster("local[*]")
        //创建Spark上下文对象
        val sc = new SparkContext(conf)

        //缩减分区数：可以简单理解为合并分区数
        val listRDD: RDD[Int] = sc.makeRDD(1 to 16, 4)

        println("缩减分区前：" + listRDD.partitions.size)

        //coalesce重新分区，可以选择是否进行shuffle过程。由参数shuffle: Boolean = false/true决定
        val coalesceRDD: RDD[Int] = listRDD.coalesce(2, true)

        println("缩减分区后：" + coalesceRDD.partitions.size)

        coalesceRDD.saveAsTextFile("output")
    }

}
